 //控制层 
app.controller('goodsController' ,function(
	//$location：内置服务，用于在不同HTML页面间传递参数
	$scope,$controller,$location,goodsService,itemCatService,typeTemplateService,fileUploadService,){

    $controller('baseController',{$scope:$scope});//继承

	//定义审核状态
	$scope.status = ["未审核","已审核","审核未通过","已关闭"];
	//定义分类列表
	$scope.itemCatList = [];
	//查询分类列表
	$scope.selectItemList = function(){
		itemCatService.findAll().success(function (response) {
			for (var i = 0; i < response.length; i++) {
				$scope.itemCatList[response[i].id] = response[i].name;
			}
        })
	}
	//点击修改按钮，跳转到goods_edit.html页面
	$scope.toUpdate = function(id){
		location.href = "goods_edit.html#?id="+id;
	}
    //根据goods.html页面传递的id查询
    $scope.findOne=function(){
        var id = $location.search()['id'];
        goodsService.findOne(id).success(function(response){
			$scope.entity= response;
			//为富文本编辑器的内容赋值
			editor.html($scope.entity.goodsDesc.introduction);
			//将得到的图片字符串转换成json对象
			$scope.entity.goodsDesc.itemImages = JSON.parse($scope.entity.goodsDesc.itemImages);
			//转换扩展属性列表
			$scope.entity.goodsDesc.customAttributeItems = JSON.parse($scope.entity.goodsDesc.customAttributeItems);
			//转换规格列表
			$scope.entity.goodsDesc.specificationItems = JSON.parse($scope.entity.goodsDesc.specificationItems);
			//得到sku商品信息列表，遍历此列表得到其中的规格对象
			var items = $scope.entity.items;
			for (var i=0; i<items.length; i++){
					//转换spec对象
					items[i].spec = JSON.parse(items[i].spec);
				}
            }
        );
    }
    $scope.checkSpec = function(specName,optionName){
		var items = $scope.entity.goodsDesc.specificationItems;
		//在此集合中根据attributeName为键查找是否存在值specName
		var obj = $scope.searchByKey(items,"attributeName",specName);
		if (obj == null)
			return false;
		else{
			if (obj.attributeValue.indexOf(optionName) > 0)
				return true;
			else
				return false;
		}
	}


    //读取列表数据绑定到表单中
	$scope.findAll=function(){
		goodsService.findAll().success(
			function(response){
				$scope.list=response;
			}			
		);
	}    
	
	//分页
	$scope.findPage=function(){
		goodsService.findPage($scope.paginationConf.currentPage,$scope.paginationConf.itemsPerPage).success(
			function(response){
				$scope.list=response.rows;	
				$scope.paginationConf.totalItems=response.total;//更新总记录数
			}			
		);
	}
	

	
	//保存 
	$scope.save=function(){				
		var serviceObject;//服务层对象
		$scope.entity.goodsDesc.introduction = editor.html();//得到富文本编辑器的内容
		if($scope.entity.goods.id!=null){//如果有ID
			serviceObject=goodsService.update( $scope.entity ); //修改  
		}else{
			serviceObject=goodsService.add( $scope.entity  );//增加 
		}				
		serviceObject.success(
			function(response){
				if(response.success){
					alert(response.message);
					$scope.entity = {};//清空entity
					editor.html("");//清空富文本编辑器
                    $scope.checkSpec("","");
				}else{
					alert(response.message);
				}
			}		
		);				
	}
	
	 
	//批量删除 
	$scope.dele=function(){			
		//获取选中的复选框			
		goodsService.dele( $scope.selectIds ).success(
			function(response){
				if(response.success){
					$scope.findPage();//刷新列表
					$scope.selectIds=[];
				}						
			}		
		);				
	}
	
	$scope.searchEntity={};//定义搜索对象 
	
	//搜索
	$scope.search=function(){
		goodsService.search($scope.paginationConf.currentPage,$scope.paginationConf.itemsPerPage,$scope.searchEntity).success(
			function(response){
				$scope.list=response.rows;	
				$scope.paginationConf.totalItems=response.total;//更新总记录数
			}			
		);
	}
	// 初始化 entity
	$scope.entity = {goods:{},goodsDesc:{"itemImages":[],"specificationItems":[],customAttributeItems:[]},items:[{}]};
	// 将正在上传的文件保存到上传的文件列表中
	$scope.addImageEntity = function(){
		$scope.entity.goodsDesc.itemImages.push($scope.imageEntity)
	}
	//点击删除将上传的文件列表中的当前项移除
    $scope.delImageEntity = function(index){
        $scope.entity.goodsDesc.itemImages.splice(index,1)
    }
	//文件上传的方法
	$scope.fileUpload = function () {
        fileUploadService.fileUpload().success(function (response) {
			if (response.success){
				alert("图片上传成功！");
				$scope.imageEntity.url = response.message;
			} else {
				alert(response.message);
			}
        })
    }

    // 查询一级分类
    $scope.findByParentId = function (parentId) {
		itemCatService.findByParentId(parentId).success(function (response) {
			$scope.category1List = response;
        })
    }

    //$watch（）函数代表监控参数 1 对应的变量的变化，当变量发生改变时会执行第二个参数对应的函数
	//此函数中参数 1 代表变量发生变化后的新值(就是你选择的哪个值)，参数 2 代表变量未发生变化前的值
    //监控一级分类：选中一级分类时加载二级分类
	$scope.$watch("entity.goods.category1Id",function (newValue,oldValue) {
		itemCatService.findByParentId(newValue).success(function (response) {
            $scope.category2List = response;
        })
    })
    //监控二级分类：选中二级分类时加载三级分类
    $scope.$watch("entity.goods.category2Id",function (newValue,oldValue) {
        itemCatService.findByParentId(newValue).success(function (response) {
            $scope.category3List = response;
        })
    })
    //监控三级分类：选中三级分类时加载模板id
    $scope.$watch("entity.goods.category3Id",function (newValue,oldValue) {
        itemCatService.findOne(newValue).success(function (response) {
            $scope.entity.goods.typeTemplateId = response.typeId;
        })
    })
	//监控模板id：根据模板id加载品牌列表、扩展属性列表、规格列表（含规格选项）
	$scope.$watch("entity.goods.typeTemplateId",function (newValue, oldValue) {
		typeTemplateService.findOne(newValue).success(function (response) {
			$scope.typeTemplate = response;
			// 转换 tb_type_template 表中的 brand_ids
			$scope.typeTemplate.brandIds = JSON.parse($scope.typeTemplate.brandIds);
			//判断执行的是修改还是新增的操作
			if ($location.search()['id'] == null) {
                //转换 tb_type_template  表中的 custom_attribute_items
                $scope.entity.goodsDesc.customAttributeItems = JSON.parse(($scope.typeTemplate.customAttributeItems));
			}
        })
		//根据模板id动态查询规格列表
		$scope.findSpecList(newValue);
    })
    //根据模板id询规格列表（包含规格选项）
    $scope.findSpecList = function (id) {
		typeTemplateService.findSpecList(id).success(function (response) {
			$scope.specList = response;
        })
    }
    //根据指定的key在指定集合中查找元素，如果存在keyValue则返回此对象，否则返回null
	$scope.searchByKey = function (list,key,keyValue) {
		for (var i=0; i<list.length; i++){
			if (list[i][key] == keyValue){
				return list[i];
			}
		}
		return null;
    }
    // tb_goods_desc 表中 specification_items字段 ：
    // [
    // {"attributeName":"网络制式","attributeValue":["移动3G","移动4G"]},
    // {"attributeName":"屏幕尺寸","attributeValue":["6寸","5.5寸"]}
    // ]
	//点击规格选项时触发的函数
	$scope.selectSpecAttribute = function (event, name, value) {
		//在specificationItems列表中查询指定key的对象
		var object = $scope.searchByKey($scope.entity.goodsDesc.specificationItems,"attributeName",name);
    	if (object == null){
            //第一次添加，为specification_items赋初始值
            $scope.entity.goodsDesc.specificationItems.push({"attributeName":name,"attributeValue":[value]})
        }else {
			if (event.target.checked){
                // attributeValue:["移动3G","移动4G"]
                //选中规格选项就向attributeValue添加值
                object.attributeValue.push(value);
            }else {
                //取消复选时从attributeValue中移除规格选项的值
                object.attributeValue.splice(object.attributeValue.indexOf(value),1);
                if (object.attributeValue.length == 0){
                    //当某个规格选项列表为空时，移除specificationItems字段中的此规格选项
                    var index = $scope.entity.goodsDesc.specificationItems.indexOf(object);
                    $scope.entity.goodsDesc.specificationItems.splice(index,1);
                }
			}
		}
        $scope.createItemList();
	}
	//生成sku列表
	$scope.createItemList = function () {
		//初始化items
		$scope.entity.items = [{spec:{},price:0,num:9999,status:'0',isDefault:'0'}];
		//获取规格列表
		var specItems = $scope.entity.goodsDesc.specificationItems;
		//遍历此规格列表
		for (var i=0; i<specItems.length; i++){
			$scope.entity.items = addColumn($scope.entity.items,specItems[i].attributeName,specItems[i].attributeValue);
		}
    }
    //增加新列的方法
	addColumn = function (list,attributeName,attributeValue) {
		var newList = [];
		for (var i=0; i<list.length; i++) {
			//得到原始集合中的数据
			var oldRow = list[i];
			for (var j=0; j<attributeValue.length; j++){
				//根据原始集合中的数据构造新的对象
				var  newRow = JSON.parse(JSON.stringify(oldRow));//深克隆
				//对新的规格选项对象赋值
				newRow.spec[attributeName] = attributeValue[j];
				//将新的规格选项对象添加到新集合中
				newList.push(newRow);
			}
		}
		return newList;//返回新集合
    }









});	

